#include "client.h"

void login_and_sigup(int sockfd,char *user_name){
    //接收用户的输入
    char inputs[1024] = {0};
    //标记服务端的响应
    int flag = 0;
    regex_t regex;
    int reti;
    //指定正则表达式
    const char *pattern = "^[A-Za-z0-9]+$";
    reti = regcomp(&regex,pattern,REG_EXTENDED);
    while(1){
        printf("请选择注册或者登录：\n1:注册新账号\n2:已有账号直接登录\n");
        memset(inputs,0,sizeof(inputs));
        //从标准输入中获取用户的选项
        read(STDIN_FILENO,inputs,sizeof(inputs));
        inputs[strlen(inputs)-1] = '\0';
        char password[10] = {0};
        char passwd[10] = {0};
        char buf[20] = {0};
        if(strcmp(inputs,"1") == 0){
            printf("请输入要注册的用户名:");
            scanf("%s",user_name);
            printf("请输入密码:");
            scanf("%s",password);
            printf("请再次输入密码:");
            scanf("%s",passwd);
            if(regexec(&regex,user_name,0,NULL,0) || regexec(&regex,password,0,NULL,0)){
                //说明用户名或者密码存在非字母和数字字符
                printf("您输入的用户名或者密码存在非字母或非数字字符，请重试...\n");
                continue;
            }
            if(strcmp(password,passwd)!=0){
                printf("两次输入的密码不一致，即将回到主界面\n");
                sleep(1);
                continue;
            }else{
                data msg;
                memset(&msg,0,sizeof(msg));
                strcat(msg.command,"sigup");
                strcat(msg.args,user_name);
                strcat(msg.args,"&");
                strcat(msg.args,password);
                //发送用户名和密码
                send(sockfd,&msg,sizeof(msg),MSG_NOSIGNAL);
                //接收传过来的flag标记
                recv(sockfd,&flag,sizeof(int),MSG_WAITALL);
                if(flag == 0){
                    //说明用户表中有这个用户名
                    printf("用户名重复,即将回到主界面...\n");
                }else if(flag == 1){
                    //说明注册成功
                    printf("恭喜您，注册成功!\n");
                }else{
                    printf("网络连接错误,请重新尝试...\n");
                }
                continue;
            }
        }else if(strcmp(inputs,"2") == 0){
            printf("请输入登录的用户名:");
            scanf("%s",user_name);
            printf("请输入密码:");
            scanf("%s",password);
            if(regexec(&regex,user_name,0,NULL,0) || regexec(&regex,password,0,NULL,0)){
                //说明用户名或者密码存在非字母和数字字符
                printf("您输入的用户名或者密码存在非字母或非数字字符，请重试...\n");
                continue;
            }
            data msg;
            memset(&msg,0,sizeof(msg));
            strcat(msg.command,"login");
            strcat(msg.args,user_name);
            strcat(msg.args,"&");
            strcat(msg.args,password);
            //发送用户名和密码
            send(sockfd,&msg,sizeof(msg),MSG_NOSIGNAL); 
            //接收传过来的flag标记
            recv(sockfd,&flag,sizeof(int),MSG_WAITALL);
            if(flag == -1){
                //服务器不存在这个用户
                printf("当前用户名未注册,请注册后登录...\n");
            }else if(flag == 0){
                //密码错误
                printf("密码输入错误,请重新登录...\n");
            }else{
                //说明登录成功
                printf("恭喜您，登录成功!\n");
                //跳出登录界面
                break;
            }
        }else{
            printf("无效输入....\n");
        }
    }
}